//引入管理员列表页面
import adminListView from "$v/adminList"
//引入管理员添加请求api
import {
    addAdminRequest,
    adminListRequest,
    deleteAdminRequest,
    isLoginRequest
} from "$a/admin";
//封装展示所有管理员列表的功能函数,当初始化的时候,添加的时候,删除的时候都要执行
const showAdminList = async (res) => {
    // 只要进入当前路由函数,则立马开始查询所有的管理员信息
    let adminListResult = null
    try {
        //将管理员信息用变量保存
        adminListResult = await adminListRequest({})
    } catch (e) {
        //请求失败的提示
        alert('获取管理员列表异常' + e.message)
        if (!e.isLogin) {
            return router.go('/login')
        }
    }

    //渲染二级路由视图,将管理员列表需要的数据传入到ejs里
    res.render(adminListView({
        adminList: adminListResult,
    }));
}

export default async (req, res, next) => {
    // 路由切换的时候验证是否登录
    try {
        //路由跳转请求
        await isLoginRequest();
    } catch (e) {
        alert("有异常"+e.message)
        //验证不通过，跳转登录界面
        if (!e.isLogin) {
            return router.go('/login')
        }
    }
    //展示管理员列表 传入res作为参数使用
    await showAdminList(res)
    const oSaveAdminBtn = document.getElementById('saveAdminBtn');
    // 添加管理员功能
    // oSaveAdminBtn.onclick = async function () {
    document.onclick = async function (e) {
        //添加管理员逻辑
        if (e.target.id === "saveAdminBtn") {
            //获取表单里的值，通过表单里的name属性获取某个值
            const adminNameValue = document.adminForm.adminName.value.trim()
            const passwordValue = document.adminForm.password.value.trim()
            const rePasswordValue = document.adminForm.rePassword.value.trim()
            //判断是否有token，没有就返回登陆页面
            if(!localStorage.getItem("user_token")){
                alert('没有权限，请重新登陆')
                document.getElementById('addClose').click()
                return router.go('/login')
            }
            //判断输入是否为空
            if (!adminNameValue || !passwordValue || !rePasswordValue) {
                return alert("输入不能为空")
            }
            //判断密码是否一致
            if (passwordValue !== rePasswordValue) {
                return alert("密码输入不一致")
            }
            //向后端发送添加管理员请求
            try {
                await addAdminRequest({
                    // 管理员用户名
                    adminName: adminNameValue,
                    // 管理员密码
                    password: passwordValue,
                    // 注册时间
                    regTime: new Date().toLocaleString()
                })
                alert("添加成功")
                //添加成功之后,管理添加窗口(手动触发某个元素上的点击事件)
                document.getElementById('addClose').click()
                //清空表单
                document.adminForm.reset();
                //展示管理员列表 传入res作为参数使用
                showAdminList(res);
            } catch (e) {
                //请求异常后提示用户
                alert("有异常"+e.message)
                  //权限认证没有权限直接返回登陆页面
                if (!e.isLogin) {
                    document.getElementById('addClose').click()
                    return router.go('/login')
                }
                // //清空表单
                document.adminForm.reset();
              
            }
        }
        //删除管理员逻辑
        if (e.target.nodeName === "BUTTON" && e.target.parentNode.nodeName === "TD") {
            const adminName = e.target.dataset.username;
            // console.log(adminName);
            try {
                //发送删除请求
                await deleteAdminRequest(adminName)
                alert("删除管理员" + adminName + "成功")
                //展示管理员列表 传入res作为参数使用
                showAdminList(res)
            } catch (e) {
                alert("删除管理员" + adminName + "异常")
                if (!e.isLogin) {
                    return router.go('/login')
                }
            }
        }

    }
}